<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>员工列表</title>
<%
	pageContext.setAttribute("APP_PATH", request.getContextPath());
%>
<!-- 引入jQuery依赖 -->
<script src="${APP_PATH }/static/js/jquery-2.1.0.min.js"></script>
<!-- 引入bootstrap样式 -->
<link href="${APP_PATH }/static/dist/css/bootstrap.min.css"
	rel="stylesheet" media="screen">
<script src="${APP_PATH }/static/dist/js/bootstrap.min.js"></script>
</head>
<body>
<!-- Modal  员工修改的模态框 -->
	<div class="modal fade" id="empUpdateModel" tabindex="-1" role="dialog"
		aria-labelledby="myModalLabel" aria-hidden="true">
		<div class="modal-dialog">
			<div class="modal-content">
				<div class="modal-header">
					<button type="button" class="close" data-dismiss="modal"
						aria-hidden="true">&times;</button>
					<h4 class="modal-title" id="myModalLabel">员工修改</h4>
				</div>
				<div class="modal-body">
					<!-- 修改表单 -->

					<form class="form-horizontal" role="form">
						<div class="form-group">
							<label for="empName_add_input" class="col-sm-2 control-label">empName</label>
							<div class="col-sm-10">
								<p class="form-control-static" id="empName_update_static">email@example.com</p>
							</div>
						</div>
						<div class="form-group">
							<label for="empName_add_input" class="col-sm-2 control-label">email</label>
							<div class="col-sm-10">
								<input type="text" class="form-control" id="email_update_input"
									placeholder="email@163.com" name="email">
									<span class="help-block"></span>
							</div>
						</div>
						<div class="form-group">
							<label for="empName_update_input" class="col-sm-2 control-label">gender</label>
							<div class="col-sm-10">
							
								<div class="radio">
									<label> <input type="radio" name="gender"
										id="gender1_update_input" value="M" checked="checked"> 男
									</label>
									<label> <input type="radio" name="gender"
										id="gender2_update_input" value="F"> 女
									</label>
								</div>
								
							</div>
						</div>
						<div class="form-group">
							<label for="empName_add_input" class="col-sm-2 control-label">部门名</label>
							<div class="col-sm-4">
							<!-- 部门提交部门id即可 -->
								<select class="form-control" name="dId" id="dept_add_select">
									
								</select>
							</div>
						</div>
					
					</form>

				</div>
				<div class="modal-footer">
					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
					<button type="button" class="btn btn-primary" id="emp_update_btn">更新</button>
				</div>
			</div>
			<!-- /.modal-content -->
		</div>
		<!-- /.modal-dialog -->
	</div>
	<!-- /.modal -->

	<!-- Modal  员工添加的模态框 -->
	<div class="modal fade" id="empAddModel" tabindex="-1" role="dialog"
		aria-labelledby="myModalLabel" aria-hidden="true">
		<div class="modal-dialog">
			<div class="modal-content">
				<div class="modal-header">
					<button type="button" class="close" data-dismiss="modal"
						aria-hidden="true">&times;</button>
					<h4 class="modal-title" id="myModalLabel">员工添加</h4>
				</div>
				<div class="modal-body">
					<!-- 添加表单 -->

					<form class="form-horizontal" role="form">
						<div class="form-group">
							<label for="empName_add_input" class="col-sm-2 control-label">empName</label>
							<div class="col-sm-10">
								<input type="text" class="form-control" id="empName_add_input"
									placeholder="empName" name="empName">
									<span class="help-block"></span>
							</div>
						</div>
						<div class="form-group">
							<label for="empName_add_input" class="col-sm-2 control-label">email</label>
							<div class="col-sm-10">
								<input type="text" class="form-control" id="email_add_input"
									placeholder="email@163.com" name="email">
									<span class="help-block"></span>
							</div>
						</div>
						<div class="form-group">
							<label for="empName_add_input" class="col-sm-2 control-label">gender</label>
							<div class="col-sm-10">
							
								<div class="radio">
									<label> <input type="radio" name="gender"
										id="gender1_add_input" value="M" checked="checked"> 男
									</label>
									<label> <input type="radio" name="gender"
										id="gender2_add_input" value="F"> 女
									</label>
								</div>
								
							</div>
						</div>
						<div class="form-group">
							<label for="empName_add_input" class="col-sm-2 control-label">部门名</label>
							<div class="col-sm-4">
							<!-- 部门提交部门id即可 -->
								<select class="form-control" name="dId" id="dept_add_select">
									
								</select>
							</div>
						</div>
					
					</form>

				</div>
				<div class="modal-footer">
					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
					<button type="button" class="btn btn-primary" id="emp_save_btn">保存</button>
				</div>
			</div>
			<!-- /.modal-content -->
		</div>
		<!-- /.modal-dialog -->
	</div>
	<!-- /.modal -->



	<!-- 搭建显示页面 -->
	<div class="container">
		<!-- 标题 -->
		<div class="row">
			<div class="col-md-12">
				<h1>SSM-CRUD</h1>
			</div>
		</div>
		<!-- 按钮 -->
		<div class="row">
			<div class="col-md-4 col-md-offset-8">
				<button class="btn btn-primary" id="emp_add_model_btn">新增</button>
				<button class="btn btn-danger" id="emp_delete_all_btn">删除</button>
			</div>
		</div>
		<!-- 显示表格数据 -->
		<div class="row">
			<div class="col-md-12">
				<table class="table table-hover" id="emps_table">
					<thead>
						<tr>
						    <th>
						        <input type="checkbox" id="check_all"/>
						    </th>
							<th>#</th>
							<th>empName</th>
							<th>gender</th>
							<th>email</th>
							<th>deptName</th>
							<th>操作</th>
						</tr>
					</thead>
					<tbody>

					</tbody>
				</table>
			</div>
		</div>
		<!-- 显示分页信息 -->
		<div class="row">
			<!-- 分页文字信息 -->
			<div class="col-md-6" id="page_info_area"></div>

			<!-- 分页条 -->
			<div class="col-md-6" id="page_nav_area"></div>
		</div>
	</div>
	</body>
	<script type="text/javascript">
	//全局定义一个变量来保存我们的记录数
	var totalRecord,currentPage;
	
		//1.页面加载完成以后,直接发送一个ajax请求,要到分页数据
		$(function() {
			to_page(1);
		});
		function to_page(pn) {
			$.ajax({
				url : "${APP_PATH}/emps",
				data : "pn=" + pn,
				type : "get",
				success : function(result) {
					//console.log(result);
					//1.解析并显示员工数据
					build_emps_table(result);
					//2.解析并显示分页信息
					build_page_info(result);
					build_page_nav(result);
				}
			});
		}
		function build_emps_table(result) {
			//清空table,不然的话旧的还在,点击下一页只能在原来的基础上append
			//empty时jquary中清空元素的方法
			$("#emps_table tbody").empty();
			var emps = result.extend.pageInfo.list;
			$.each(emps, function(index, item) {
				var checkBoxTd = $("<td><input type='checkbox' class='check_item'/></td>");
				var empIdTd = $("<td></td>").append(item.empId);
				var empNameTd = $("<td></td>").append(item.empName);
				var genderTd = $("<td></td>").append(
						item.gender == "M" ? "男" : "女");
				var emailTd = $("<td></td>").append(item.email);
				var deptNameTd = $("<td></td>")
						.append(item.department.deptName);
				var editBtn = $("<button></button>").addClass(
						"btn btn-primary btn-sm edit_btn").append(
						$("<span></span>").addClass(
								"glyphicon glyphicon-pencil")).append("编辑");
				//为编辑按钮添加一个自定义属性,来表示当前员工id
				editBtn.attr("edit-id",item.empId);
				var delBtn = $("<button></button>").addClass(
						"btn btn-danger btn-sm delete_btn").append(
						$("<span></span>")
								.addClass("glyphicon glyphicon-trash")).append(
						"删除");
				delBtn.attr("del-id",item.empId);
				var btnTd = $("<td></td>").append(editBtn).append(" ").append(
						delBtn);
				//append方法执行完成后还是返回原来的元素
				$("<tr></tr>").append(checkBoxTd).append(empIdTd).append(empNameTd).append(
						genderTd).append(emailTd).append(deptNameTd).append(
						btnTd).appendTo("#emps_table tbody");
			});
		}
		//解析显示分页信息
		function build_page_info(result) {
			$("#page_info_area").empty();
			$("#page_info_area").append(
					"当前" + result.extend.pageInfo.pageNum + " 页,总共"
							+ result.extend.pageInfo.pages + " 页,总共"
							+ result.extend.pageInfo.total + "条记录");
			totalRecord = result.extend.pageInfo.total;
			currentPage = result.extend.pageInfo.pageNum;
		}
		//解析显示分页条   0.2完善分页条
		function build_page_nav(result) {
			//page_nav_area
			$("#page_nav_area").empty();
			var ul = $("<ul></ul>").addClass("pagination");

			var firstPageLi = $("<li></li>").append(
					$("<a></a>").append("首页").attr("href", "#"));
			var prePage = $("<li></li>").append($("<a></a>").append("&laquo;"));
			if (result.extend.pageInfo.hasPreviousPage == false) {
				firstPageLi.addClass("disabled");
				prePage.addClass("disabled");
			} else {
				//为元素添加点击翻页的时间
				firstPageLi.click(function() {
					to_page(1);
				});
				prePage.click(function() {
					to_page(result.extend.pageInfo.pageNum - 1);
				});
			}

			var nextPage = $("<li></li>")
					.append($("<a></a>").append("&raquo;"));
			var LastPageLi = $("<li></li>").append(
					$("<a></a>").append("末页").attr("href", "#"));
			if (result.extend.pageInfo.hasNextPage == false) {
				LastPageLi.addClass("disabled");
				nextPage.addClass("disabled");
			} else {
				//为元素添加点击翻页的时间
				LastPageLi.click(function() {
					to_page(result.extend.pageInfo.pages);
				});
				nextPage.click(function() {
					to_page(result.extend.pageInfo.pageNum + 1);
				});
			}

			//添加首页和前一页
			ul.append(firstPageLi).append(prePage);
			//遍历给ul中添加代码提示
			$.each(result.extend.pageInfo.navigatepageNums, function(index,
					item) {
				var numLi = $("<li></li>").append($("<a></a>").append(item));
				if (result.extend.pageInfo.pageNum == item) {
					numLi.addClass("active");
				}
				numLi.click(function() {
					to_page(item);
				});
				ul.append(numLi);
			});
			//添加后一页和末页
			ul.append(nextPage).append(LastPageLi);
			//再把ul添加到nav中
			var navEle = $("<nav></nav>").append(ul);
			//把导航条添加到div中
			navEle.appendTo("#page_nav_area");
		}
		
        //点击新增按钮弹出模态框
		$("#emp_add_model_btn ").click(function() {
			//表单完整重置,表单数据以及表单样式
			//$("#empAddModel form")[0].reset();
			reset_form("#empAddModel form");
			//发送Ajax请求,查出部门信息,显示在下拉列表中
			getDepts("#empAddModel select");
			//alert("弹出模态框");
			$("#empAddModel").modal({
				backdrop : "static"
			});
		});
        //清空表单样式及内容
        function reset_form(ele){
        	$(ele)[0].reset();//清空表单
        	//清空表单样式
        	$(ele).find("*").removeClass("has-error has-success");//第一种方式
        	$(ele).find(".help-block").text("");
        }
        
        //查出所有的部门信息,并显示在下拉列表中
        function getDepts(ele) {
        	//要清空之前下拉列表的值
        	$(ele).empty();
			$.ajax({
				url:"${APP_PATH}/depts",
				type:"GET",
				success:function(result){
					//$("#dept_add_select").appent("")
					//遍历部门信息
					$.each(result.extend.depts,function(){
						var optionEle = $("<option></option>").append(this.deptName).attr("value",this.deptId);
						optionEle.appendTo($(ele));
					})
				}
			});
		}
        //校验用户名是否可用
        $("#empName_add_input").change(function() {
			//发送ajax请求校验用户名是否可用
			var empName = this.value;
			alert(empName);
			$.ajax({
				url:"${APP_PATH}/checkuser",
				data:"empName="+empName,
				type:"post",
				success:function(result){
					if (result.code == 100) {//成功,可用
						alert(result.code);
						show_validate_msg("#empName_add_input","success","用户名可用");
						$("#emp_save_btn").attr("ajax-va","success");
					}else {
						alert(result.code);
						show_validate_msg("#empName_add_input","error",result.extend.va_msg);
						$("#emp_save_btn").attr("ajax-va","error");
					}
				}
			});
		});
        
        $("#emp_save_btn").click(function() {
			//1.模态框中填写的表单数据提交给服务器进行保存
			//1.5先对要提交给服务器的数据进行校验
			 if(!validate_add_form()){
				return false;
			} 
			//1.6 判断之前的Ajax用户名是否校验成功了
			    //拿到当前按钮的ajax-va属性的值(自定义属性)
			    if($(this).attr("ajax-va")=="error"){
			    	return false;
			    }
			//2.发送ajax请求保存员工
			 $.ajax({
				url:"${APP_PATH}/emp",
				type:"post",
				data:$("#empAddModel form").serialize(),
				success:function(result){
					if (result.code == 100) {
						
					//alert(result.msg);
					//当我们员工保存成功,
					//1.关闭模态框,
					$("#empAddModel").modal('hide');
					
					//2.来到最后一页,显示刚才保存的数据
				         //发送Ajax请求,显示最后一页数据
				      to_page(totalRecord);
					}else{
						//显示失败信息
						//console.log(result);
						//有哪个字段的错误信息,就显示那个字段
						if (undefined != result.extend.errorFields.email) {
							//显示邮箱错误信息
							show_validate_msg("#email_add_input","error",result.extend.errorFields.email);
						}
						if (undefined != result.extend.errorFields.empName) {
							//显示员工名字的错误信息
							show_validate_msg("#empName_add_input","error",result.extend.errorFields.empName);
						}
						
					}
				}
			});
		});
        
        //校验表单数据的方法
        function validate_add_form() {
			//1.拿到要校验的数据,使用正则表达式,可以从jQuery文档中复制
			var empName = $("#empName_add_input").val();
			var regName = /(^[a-zA-Z0-9_-]{3,16}$)|(^[\u2E80-\u9FFF]{2,5})/;
			if(!regName.test(empName)){//如果用户名不正确
				//alert("用户名可以是2-5位中文或者3-16位英文和数字的组合");
				show_validate_msg("#empName_add_input","error","用户名必须是2-5位中文或者3-16位英文和数字的组合")
				return false;
			}else{
				show_validate_msg("#empName_add_input","success","");
				
			};
			//校验邮箱信息
			var email = $("#email_add_input").val();
			var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
			if(!regEmail.test(email)){//邮箱格式不正确
				//alert("邮箱格式不正确");
				show_validate_msg("#email_add_input","error","邮箱格式不正确 ");
				return false;
			}else{
				show_validate_msg("#email_add_input","success"," ")
				
			};
			return true;
		}
        
        function show_validate_msg(ele,status,msg) {
        	//清除当前元素校验状态
        	//alert("1111");
        	$(ele).parent().removeClass("has-success has-error");
        	$(ele).next("span").text("");
			if(status == "success"){
				$(ele).parent().addClass("has-success");
				$(ele).next("span").text(msg);
			}else if(status == "error"){
				$(ele).parent().addClass("has-error");
				$(ele).next("span").text(msg);
			}
		}
        
        //我们是按钮创建之前就绑定click,所以绑定不了       
        /* $(".edit_btn").click(function() {
			alert("edit");
		}); */
        //1.所以可以在创建按钮的时候绑定,但这样耦合行很大
        //2.绑定点击.live()
        //jQuery新版本已经把live删除了,使用on进行替代
        $(document).on("click",".edit_btn",function(){
        	//alert("edit");
        	//0.查出员工信息,显示员工信息
        	getEmp($(this).attr("edit-id"));
        	//1.查出部门信息,并显示部门列表
        	getDepts("#empUpdateModel select");
        	//弹出模态框
        	//3.把员工id传递给员工的更新按钮
        	$("#emp_update_btn").attr("edit-id",$(this).attr("edit-id"));
        	$("#empUpdateModel").modal({
				backdrop : "static"
			});
        });
		//单个删除
        $(document).on("click",".delete_btn",function(){
        	//1.弹出是否确认删除对话框
        	var empName = $(this).parents("tr").find("td:eq(2)").text();
        	var empId = $(this).attr("del-id");
        	if (confirm("确认删除["+empName+"]吗?")) {//如果确认返回true,取消返回false
				//确认,发送ajax请求
				$.ajax({
					url:"${APP_PATH}/emp/"+empId,
					type:"delete",
					success:function(result){
						alert(result.msg);
						//回到本页,相当于是重新请求页面数据,然后把这个刷新掉
						to_page(currentPage);
					}
				});
			}
        });
		//查询员工信息,显示员工信息
		function getEmp(id) {
			$.ajax({
				url:"${APP_PATH}/emp/"+id,
				type:"GET",
				success:function(result){
					//console.log(result);
					var empData = result.extend.emp;
					$("#empName_update_static").text(empData.empName);
					$("#email_update_input").val(empData.email);
					$("#empUpdateModel input[name=gender]").val([empData.gender]);
					$("#empUpdateModel select").val([empData.dId]);
				}
			});
		}
        //点击更新,更新员工信息
        $("#emp_update_btn").click(function () {
			//验证邮箱是否合法
			var email = $("#email_update_input").val();
			var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
			if(!regEmail.test(email)){//邮箱格式不正确
				//alert("邮箱格式不正确");
				show_validate_msg("#email_update_input","error","邮箱格式不正确 ");
				return false;
			}else{
				show_validate_msg("#email_update_input","success"," ")
				
			}
			//2.发送Ajax请求保存更新的员工数据
			$.ajax({
				url:"${APP_PATH}/emp/"+$(this).attr("edit-id"),
				type:"put",
				data:$("#empUpdateModel form").serialize(),
				success:function(result){
					//alert(result.msg);
					//关闭对话框
					$("#empUpdateModel").modal("hide");
					//在那一页改的回到那一页
					to_page(currentPage);
				}
			})
		});
        
        
        //完成全选/全不选功能
        $("#check_all").click(function(){
        	//attr获取checked是undefinded;
        	//我们这些原生的属性,推荐用prop,自定义用attr
        	$(this).prop("checked");
        	$(".check_item").prop("checked",$(this).prop("checked"));
        });
        //check_item
        $(document).on("click",".check_item",function(){
        	//判断当前选择中的元素是否5个
        	var flag = $(".check_item:checked").length == $(".check_item").length;
        	$("#check_all").prop("checked",flag);
        });
        
        //点击全部删除,就批量删除
        $("#emp_delete_all_btn").click(function(){
        	var empNames = "";
        	var del_idstr = "";
        	//$(".check_item:checked")//这算是一个被选中元素的集合
        	$.each($(".check_item:checked"),function(){
        		empNames += $(this).parents("tr").find("td:eq(2)").text()+",";
        		//alert($(this).parents("tr").find("td:eq(2)").text());
        		//顺便组装下员工id的字符串
        		del_idstr += $(this).parents("tr").find("td:eq(1)").text()+"-";
        	});
        	//去除尾部逗号
        	empNames = empNames.substring(0,empNames.length-1);
        	//去除id多余的-
        	del_idstr = del_idstr.substring(0,del_idstr.length-1);
        	if (confirm("确认删除["+empNames+"]吗?")) {
				//发送ajax请求删除
				$.ajax({
					url:"${APP_PATH}/emp/"+del_idstr,
					type:"delete",
					success:function(result){
						alert(result.msg);
						//回到当前页面
						to_page(currentPage);
					}
				});
			}
        });
 </script>       
 </html>